package br.pucrio.inf.aaaong.models.domain.database.dao.basic;

import java.sql.Date;
import java.sql.SQLException;
import java.util.Calendar;

import br.com.caelum.vraptor.ioc.Component;
import br.pucrio.inf.aaaong.models.database.exceptions.PostgreSQLConstraintException;
import br.pucrio.inf.aaaong.models.database.update.UpdateQueryExecutor;
import br.pucrio.inf.aaaong.models.database.update.UpdateQueryParamsPreparer;
import br.pucrio.inf.aaaong.models.database.update.UpdateQueryParamsSetter;
import br.pucrio.inf.aaaong.models.domain.database.dao.basic.beans.AdolescenteBean;

@Component
public class AdolescenteDAO {
	private static final String QUERY_INSERT = "insert into Adolescente("
			+ "id_adolescente,tipo_adolescente,nome,data_nascimento,end_logradouro,"
			+ "end_numero,end_bairro,end_cidade,end_estado,end_pais,"
			+ "end_ponto_referencia,end_cep,tec_serie,tec_nome"
			+ ") values (?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
	
	private UpdateQueryExecutor queryExecutor;

	public AdolescenteDAO(UpdateQueryExecutor queryExecutor) {
		this.queryExecutor = queryExecutor;
	}
	
	public void insert(final AdolescenteBean adolescente) throws PostgreSQLConstraintException {
		queryExecutor.execute(QUERY_INSERT, new UpdateQueryParamsPreparer() {
			public void prepareParameters(UpdateQueryParamsSetter params) throws SQLException {
				params.setInt(adolescente.getId());
				params.setString(adolescente.getTipo());
				params.setString(adolescente.getName());
				params.setCalendar(adolescente.getDataNascimento());
				params.setString(adolescente.getLogradouro());
				params.setInt(adolescente.getNumeroEndereco());
				params.setString(adolescente.getBairro());
				params.setString(adolescente.getCidade());
				params.setString(adolescente.getEstado());
				params.setString(adolescente.getPais());
				params.setString(adolescente.getPontoReferenciaEndereco());
				params.setString(adolescente.getCep());
				params.setInt(adolescente.getSerieTecnico());
				params.setString(adolescente.getCursoTecnico());
			}
		});
	}
}
